package handler

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"path/filepath"
	"pro/global"
	"pro/internal/models"
	"pro/internal/params"
	"pro/pkg/baidu_review"
	"pro/pkg/rabbitmq"
	"pro/pkg/upload"
)

type VideoHandler struct {
	review *baidu_review.Review
	rabbit *rabbitmq.RabbitMQ
}

func NewHandler() *VideoHandler {
	rmq := rabbitmq.NewRabbitMQSimple("review_log")
	return &VideoHandler{
		review: baidu_review.NewReview(),
		rabbit: rmq,
	}
}

func UploadImage(c *gin.Context) {
	file, err := c.FormFile("image")
	if err != nil {
		return
	}

	ext := filepath.Ext(file.Filename)
	if ext != ".jpg" && ext != ".png" {
		c.JSON(http.StatusInternalServerError, gin.H{
			"code":    "500",
			"message": "图片格错误",
		})
		return
	}

	if file.Size > 2*1024*1024 {
		c.JSON(http.StatusInternalServerError, gin.H{
			"code":    "500",
			"message": "图片大小不得超过2M",
		})
		return
	}

	up, err := upload.Upload(file)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{
			"code":    "500",
			"message": "图片上传失败",
		})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "图片上传成功",
		"Token":   up,
	})
}

type VideoReviewTask struct {
	VideoID int
	Title   string
	Url     map[string]interface{}
}

func AddTieZi(c *gin.Context) {
	var err error
	var v models.Videos
	var req params.AddTieZiReq

	if err = c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	v.Title = req.Title
	v.AuthorId = req.AuthorId
	v.Image = req.Image
	v.Status = 0
	v.Visibility = req.Visibility
	v.Types = req.Types
	if err = v.AddVideo(); err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"message": "帖子发布失败"})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "帖子发布成功，正在审核",
		"Token":   v,
	})
}

func TieZiSearch(c *gin.Context) {
	var err error
	var v []models.Videos
	var req params.SearchTieZiReq

	if err = c.ShouldBindJSON(&req); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	query := global.DB
	if req.Types != "" {
		query = query.Where("types=?", req.Types)
	}

	query = query.Find(&v)

	c.JSON(http.StatusOK, gin.H{
		"code":    200,
		"message": "列表展示成功",
		"data":    v,
	})
}

//// 视频审核消费者，单独启动
//func VideoReviewConsumer() {
//	// 声明队列
//	queue, err := global.RabbitMQChannel.QueueDeclare(
//		"video_review_queue", // 队列名
//		true,                 // 持久化
//		false,                // 自动删除
//		false,                // 排他性
//		false,                // 非阻塞
//		nil,                  // 参数
//	)
//	if err != nil {
//		global.Logger.Fatal("声明队列失败: ")
//	}
//	// 消费消息
//	msgs, err := global.RabbitMQChannel.Consume(
//		queue.Name, // 队列名
//		"",         // 消费者标签
//		true,       // 自动确认
//		false,      // 排他性
//		false,      // 不本地通知
//		false,      // 非阻塞
//		nil,        // 参数
//	)
//	if err != nil {
//		global.Logger.Fatal("注册消费者失败: ")
//	}
//	// 处理消息
//	forever := make(chan bool)
//	go func() {
//		for d := range msgs {
//			var task VideoReviewTask
//			if err := json.Unmarshal(d.Body, &task); err != nil {
//				global.Logger.Error("解析审核任务失败: ")
//				continue
//			}
//			// 执行审核
//			VideoCensor := NewHandler().review
//			is合规 := VideoCensor.TestingStringV2(task.Title, task.Url)
//			is合规 = VideoCensor.TestingString(task.Title)
//			// 更新视频状态
//			var video models.Videos
//			if err = global.DB.First(&video, task.VideoID).Error; err != nil {
//				global.Logger.Error("查找视频失败: ")
//				continue
//			}
//
//			if is合规 {
//				video.Status = 2 // 审核通过
//			} else {
//				video.Status = 3 // 审核不通过
//			}
//			global.DB.Save(&video)
//		}
//	}()
//	<-forever
//}
